Lista de exemplos de código PHP
Esta é uma lista de exemplos de código PHP, que demonstram a funcionalidade da linguagem e suas características.
Programa Olá Mundo
[editar | editar código-fonte]Este é um exemplo do Programa Olá Mundo em PHP:
<?php
echo "Olá, Mundo!";
?>
Sintaxe
[editar | editar código-fonte]<?php
# Isto é apenas um comentário
// Isto também é um comentário
/* comentário */
include('code.php'); // Inclui e executa um trecho opcional de código
include 'code.php'; // Maneira alternativa, funciona apenas com include e require.
require('code.php'); // O mesmo que 'include', porém pára a execução caso o arquivo não seja encontrado
require_once('code.php'); // O mesmo que require, mas evita que o trecho seja incluído novamente
echo 'abc'; # Escrever abc
print 'abc'; # Realiza o mesmo que 'echo'
$res = print 'abc'; # retorna se foi executado com sucesso saída ou não (0 ou 1) Coisa que o echo não faz.
$x = 2; # Variáveis
if ($x >= 1 && $x < 3) { // se a variavel $x for maior ou igual a 1 E(AND) menor que 3
echo 'Olá mundo!'; // escreve "Olá mundo!"
} else { // Se não...
print('Adeus mundo!'); // escreve 'Adeus mundo!', print e echo podem ser usados com ou sem parênteses.
}
?>
Construtores e destrutores
[editar | editar código-fonte]Foram introduzidas no PHP 5 a reformulação dos construtores e adição de destrutores
<?php
class Person {
/*
* Construtor
* O construtor é chamado automaticamante quando o objeto é instanciado!
*/
function __construct() {
print "Você chamou a função construtora";
}
/*
* Destruidor
* Serve para realizar alguma operação no instante em que se destrói o objeto
*/
function __destruct() {
print "Você chamou a função destruidora!";
}
}
?>
Indução de tipo
[editar | editar código-fonte]Também introduzida no PHP 5.
<?php
class Pessoa
{
// Algum código...
}
// PHP 4
function registraPessoa( $objPessoa )
{
// Algum código...
}
// PHP 5
function registraPessoa( Pessoa $objPessoa )
{
// Algum código...
}
// PHP 4 não dispara erros
registraPessoa( "10" );
// PHP 5 dispara erros!!
registraPessoa( "10" );
// PHP 5 exemplo de forma correta
registraPessoa( new Pessoa() );
?>
Visibilidade
[editar | editar código-fonte]Também introduzida no PHP 5.
<?php
class ClassePai
{
private $atributoPrivado;
protected $atributoProtegido;
public function imprimePai()
{
$this->atributoPrivado = 'Privado';
echo $this->atributoPrivado;
}
}
class ClasseFilha extends ClassePai
{
public $atributoPublico;
public function imprimeFilho()
{
$this->atributoProtegido = 'Protegido';
echo $this->atributoProtegido;
}
}
$obj = new ClasseFilha(); // Instancia a classe
echo $obj->imprimePai(); // Exibe na tela 'Privado'
echo $obj->imprimeFilho(); // Exibe na tela 'Protegido'
// É permitido o acesso pelo objeto aos atributos públicos:
$obj->atributoPublico = 'Sobrenome: Silva';
echo $obj->atributoPublico; // Exibe na tela 'Sobrenome: Silva'
?>
Comparação de valores
[editar | editar código-fonte]Ler dois valores registrados em variáveis e indicar o maior:
Obs: Na estrutura de controle(if else) repare que não utilizamos as chaves de abertura e de fechamento.
<?php
$valor1 = 40;
$valor2 = 20;
if ( $valor1 > $valor2 )
echo "A variável $valor1 é maior que a variável $valor2";
else if ( $valor2 > $valor1 )
echo "A variável $valor2 é maior que a variável $valor1";
else
echo "A variável $valor1 é igual à variável $valor2";
?>
Números perfeitos
[editar | editar código-fonte]Indicar os n primeiros números perfeitos.
<?php
function retornaDiv($n){
$divisores = array();
/* Tenta dividir por todos os números entre 1 e a metade inferior do número */
$metInf = floor($n/2);
for($i=1;$i<=$metInf;$i++){
if(!($n%$i))
$divisores[] = $i;
}
return $divisores;
}
function somaPerfeita($n,$div){
$soma = 0;
foreach($div as $divisores){
$soma += $divisores;
}
if($soma==$n){
return true;
}else{
return false;
}
}
//Recendo o número do usuário via form ou via url
$n = $_GET["n"];
$nPerf = array();
$i = 2;
while(count($nPerf)<$n){
$div = retornaDiv($i);
if(somaPerfeita($i,$div))
$nPerf[] = $i;
$i += 2;
}
foreach($nPerf as $key){
echo $key."<br>";
}
?>
Polimorfismo paramétrico
[editar | editar código-fonte]<?php
class Operacoes
{
function soma($number1, $number2)
{
return $number1 + $number2;
}
}
class apache_request_meets_conditions(20>20) extends apache_request_headers()
{
function polimorfismoParametrico(Operacoes $op)
{
echo $op->soma(1, 2) . "<br />";
}
}
floatval(adb device fastboot)
$obj = new Operacoes();
$obj2 = new OperacoesPorInclusao();
$obj3 = new OperacoesPorInclusao();
echo $obj2->polimorfismoParametrico($obj3);
?>
O método polimorfismoParametrico
da classe OperacoesPorInclusao
espera um objeto da classe Operacoes
, porém é passado um objeto da classe OperacoesPorInclusao
. Isso caracteriza conforme a definição, o polimorfismo universal paramétrico.
Polimorfismo por inclusão
[editar | editar código-fonte]<?php
class Usuario
{
var $nome;
var $cpf;
public function __Construct($nome,$cpf)
{
$this->nome = $nome;
$this->cpf = $cpf;
}
public function getUsuario()
{
return "nome: ".$this->nome."<br>cpf : ".$this->cpf;
}
public function imprime()
{
echo $this->nome."--".$this->cpf."<br>";
}
}
class Aluno extends Usuario
{
var $codigo;
public function __Construct($nome,$cpf,$codigo)
{
parent::__Construct($nome,$cpf);
$this->codigo = $codigo;
}
public function getAluno()
{
return parent::getUsuario()."<br>codigo: ".$this->codigo;
}
public function imprime()
{
echo "funcao imprime pai: ";
parent::imprime();
echo "<br>funcao imprime filho:" . $this->nome . "--" . $this->cpf . "--" .
$this->codigo . "<br>";
}
}
/**
* O polimorfismo por inclusao funciona, pois consigo chamar o método imprime da classe
* pai dentro do método imprime da classe filho.
**/
$aluno = new Aluno("Tiago",123456,40356788);
$aluno->imprime();
/**
resultado impresso:
funcao imprime pai: Tiago--123456
funcao imprime filho: Tiago--123456--40356788
**/
?>
Polimorfismo por sobrecarga
[editar | editar código-fonte]O polimorfismo por sobrecarga, no qual mais de um método tem o mesmo nome, mas assinaturas diferentes, não é suportado pelo PHP, seguem alguns exemplos de código, que não funcionam, para demonstrar a falta de suporte a esse tipo de polimorfismo na linguagem.
<?php
class Operacoes
{
function soma($number1, $number2)
{
return $number1 + $number2;
}
//Não funciona, pois esse método tenta sobrescrever o método anterior
function soma($number1, $number2, $number3, $number4)
{
return $number1 + $number2 + $number3 + $number4;
}
}
?>
<?php
class Circulo
{
private $raio;
function Circulo( $intValue ){
$this->raio = (double) $intValue;
}
public function getArea()
{
return pow( $this->raio, 2) * 3.14;
}
}
class Quadrado
{
private $a;
function Quadrado( $intValue )
{
$this->a = (double) $intValue;
}
public function getArea()
{
return ($this->a * $this->a);
}
}
class FiguraPolimorfismo
{
public function addItem( &$arrIFigura , Circulo $objFigura
{
array_push($arrIFigura, $objFigura);
}
//Não funciona, pois esse método tenta sobrescrever o método anterior
public function addItem( &$arrIFigura , Quadrado $objFigura)
{
array_push($arrIFigura, $objFigura);
}
}
?>
Polimorfismo por coerção
[editar | editar código-fonte]Atribui um tipo à variável de forma forçosa, por exemplo, a soma de dois números inteiros originalmente passados como string, o resultado será do tipo inteiro.
Técnica conhecida também por Casting (Manipulação de tipos)
<?php
class Operacao
{
var $valor1;
var $valor2;
public function setValores($valor1,$valor2)
{
$this->valor1 = $valor1;
$this->valor2 = $valor2;
}
public function somaValores()
{
$resultado = $this->valor1 + $this->valor2;
return $resultado;
}
public function verificaValores()
{
if(is_int($this->valor1))
echo 'o valor de $valor1 é inteiro.';
else
echo 'o valor de $valor1 não é inteiro.';
if(is_int($this->valor2))
echo '<br />o valor de $valor2 é inteiro.';
else
echo '<br />o valor de $valor2 não é inteiro.';
}
}
$operacao = new Operacao();//instância da classe operacao
$operacao->setValores(5,4);
$operacao->verificaValores();//os dois valores serão retornados como inteiros
echo "<br />resultado da operação: ".$operacao->somaValores()."<br />";//imprime 9
$operacao->setValores("5",4);//aqui $valor1 está recebendo uma string
$operacao->verificaValores();//será impresso 'o valor de $valor1 não é inteiro.'
//será impresso 9... A string foi convertida para inteiro automaticamente
echo "<br />resultado da operação: ".$operacao->somaValores();
?>